import './public-path';
import Vue from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';
import Particles from 'vue-particles';
import Element from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import '@/theme/index.scss';
import { i18n } from '@/i18n/index.js';
import '@/utils/permission'; // 引入自定义指令
import { globalComponentSize } from '@/utils/componentSize.js';
import { Session } from '@/utils/storage.js';
Vue.use(Particles);
Vue.use(Element, { i18n: (key, value) => i18n.t(key, value), size: globalComponentSize });
import { loadCSS, loadJS } from '@/utils/dynamicAssetLoader.js';
Vue.config.productionTip = false;
Vue.prototype.bus = new Vue();

// new Vue({
// 	router,
// 	store,
// 	i18n,
// 	render: (h) => h(App),
// }).$mount('#app');

// / 判断是否在qiankun的运行环境下，非qiankun运行环境下单独运行
if (window.__POWERED_BY_QIANKUN__) {
	// eslint-disable-next-line no-undef
	__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}

let instance = null;
function render(props = {}) {
	const { container } = props;
	// / 每次渲染的时候调用redirectPopup事件
	// redirectPopup(props);

	// console.log(11111111111111, window.__POWERED_BY_QIANKUN__, '字段值')
	instance = new Vue({
		router,
		store,
		i18n,
		render: (h) => h(App),
	}).$mount(container ? container.querySelector('#app') : '#app', true); //开启沙箱
}

if (!window.__POWERED_BY_QIANKUN__) {
	// console.log('独立运行');
	// Load_CESIUM();
	render();
}


function redirectPopup(container) {
	// 子应用中需要挂载到子应用的弹窗className。样式class白名单，用子应用的样式。
	const whiteList = ['el-select-dropdown', 'el-popper', 'el-popover', 'el-dialog__wrapper'];

	// 保存原有document.body.appendChild方法
	const originFn = document.body.appendChild.bind(document.body);

	// 重写appendChild方法
	document.body.appendChild = (dom) => {
		// 根据标记，来区分是否用新的挂载方式
		let count = 0;
		whiteList.forEach((x) => {
			if (dom.className.includes(x)) count++;
		});
		if (count > 0 && container.container) {
			// 有弹出框的时候，挂载的元素挂载到子应用上，而不是主应用的body上
			container.container.querySelector('#app').appendChild(dom);
		} else {
			originFn(dom);
		}
	};
}

// 状态监听 暂时未启用
function storeTest(props) {
	// console.log(props, 'props')
	// 初始化状态
	const initialState = {
		token: '',
		userInfo: {},
	};

	// 监听全局状态变化
	props.onGlobalStateChange &&
		props.onGlobalStateChange(
			(state, prev) => {
				// 状态变更时的回调函数
				// console.log(`[onGlobalStateChange - ${props.name}]:`, state, prev);
			},
			true // true 表示立即执行一次回调函数
		);

	// 设置初始状态
	props.setGlobalState &&
		props.setGlobalState({
			...initialState, // 展开初始状态
			token: props.token,
			userInfo: {
				name: props.name,
			},
		});
}

// 各个生命周期，只会在微应用初始化的时候调用一次，下次进入微应用重新进入是会直接调用mount钩子，不会再重复调用bootstrap
export async function bootstrap() {
	// console.log('111111111111 [vue] vue app bootstraped');
}
// 应用每次进入都会调用mount方法，通常在这里触发应用的渲染方法
export async function mount(props) {
	// // 动态加载外部资源
	// const link = document.createElement('link');
	// link.rel = 'stylesheet';
	// link.href = 'http://127.0.0.1:9903/Cesium/Widgets/widgets.css';
	// document.head.appendChild(link);

	// const script = document.createElement('script');
	// script.src = 'http://127.0.0.1:9903/Cesium/Cesium.js';
	// script.onload = () => {
	// 	// 设置 Cesium 的基础路径
	// 	Cesium.buildModuleUrl.setBaseUrl('http://127.0.0.1:9903/Cesium/');
	// 	// 资源加载完成后执行的逻辑
	// 	console.log('Cesium loaded');
	// };
	// document.body.appendChild(script);
	// console.log('携带的参数', props);
	// if(props.setGlobalState) {  // 确保 props 中有 setGlobalState 方法
	//   storeTest(props);// 设置全局状态
	// }
	if (Session.get('token')) {
		// console.log('token存在')
	} else {
		// console.log('token不存在')
		let token = props.getGlobalState.token;
		let userInfo = props.getGlobalState.userInfo;
		setSession(token, userInfo);
	}
	render(props);
}
export async function setSession(token, userInfo) {
	Session.set('token', token);
	Session.set('userInfo', userInfo);
}
// 应用每次切除/注销会调用的方法，在这里会注销微应用的应用实例
export async function unmount() {
	instance.$destroy();
	instance.$el.innerHTML = '';
	instance = null;
}
